package cc.rengu.igas.channel.wechat.core.realize;


import cc.rengu.igas.channel.wechat.core.model.bean.WechatPaySign;
import cc.rengu.oltp.service.common.entity.CertInfo;

/**
 * 加签验证服务
 * Created by 王成 on 2018/5/18.
 */
public interface WechatSignService {
    /**
     * 生成加签字符串
     *
     * @param signData 需要加签的字符串
     * @return 加签后的字符串
     */
    String generateSignString(String signData, CertInfo certInfo) throws Exception;

    /**
     * 校验数字签名
     *
     * @param signData  数字签名
     * @param signBlock 生成数字签名的字符串
     * @return true-成功，false-失败
     */
    boolean verifySignString(String signData, String signBlock, CertInfo certInfo) throws Exception;

    /**
     * 生成微信数字签名串
     *
     * @param signBlock 需要加签的字符串
     * @param signKey   MD5加签密钥
     * @return 数字签名串
     */
    String generateMD5SignString(String signBlock, String signKey);

    /**
     * 微信数字签名校验
     *
     * @param signData  需要验证的数字签名串
     * @param signBlock 需要验证的加签BLOCK
     * @param signKey   加签密钥
     * @return true-成功，false-失败
     */
    boolean verifyMD5SignString(String signData, String signBlock, String signKey);

    /**
     * 生成加签Block
     *
     * @param xmlString 原始报文
     * @return 加签BLOCK
     */
    String generateSignBlockString(String xmlString);

    /**
     * 微信支付订单信息生成加签Block
     *
     * @param wechatPaySign 微信订单支付信息
     * @return 加签Block
     */
    String generatePaySignString(WechatPaySign wechatPaySign);

    /**
     * RSA加密敏感信息
     *
     * @param sensitiveInfo 敏感信息
     * @param certInfo      证书信息
     * @param padding       填充模式
     * @return 加密后信息
     * @throws Exception
     */
    String rsaEncSensitiveInfo(String sensitiveInfo, CertInfo certInfo, String padding) throws Exception;

}
